#ifndef ARCH_LINUX_H
#define ARCH_LINUX_H
#include "nftables.h"
#include <iostream>

class Arch_linux {
private:
    std::string partion_luks{},

                partion_luks_uuid{},
                lvm_volume_root_uuid{},

                size_lvm_volume_root = "60G",
                size_lvm_volume_swap = "2G",
                
                disk_grub{},                   
                partion_grub = (disk_grub + "1").data(),

                packages{},
                timezone = "/usr/share/zoneinfo/UTC",
                hostname = "pc",
                user_name = "user",
                lvm_group = "glvm",
                kernel{};
public:
    void clear_display();
    void enableInternet();
    void Update();
    void loadkeys_us();
    void install_cryptsetup_and_lvm();
    void addService(std::string deamon, std::string level);
    void modprobe(std::string module);
    void configurate_disk_for_grub();
    void format_partion(std::string partion, std::string file_system);
    void encrypt_luks_partion();
    void open_luks_partion();
    void create_lvm();
    void create_lvm_group();
    void create_lvm_volume_swap();
    void create_lvm_volume_root();
    void create_lvm_volume_home();
    void create_swap_lvm_partion();
    void enable_swap_lvm_partion();
    void format_lvm_and_grub_partions();
    void mount_lvm_root();
    void mount_lvm_home();
    void mount_lvm_boot();
    void install();
    void generate_fstab();
    void copy_second_script();
    void write_variables_to_file();
    void chroot_and_start_second_script();
    void read_variables_from_file();
    void install_packages(std::string packages);
    void generate_locale_us_ru();
    void link_timezone();
    void create_files_hostname_and_hosts();
    void configurate_mkinitcpio();
    void add_user(std::string user_name);
    void set_user_password(std::string user_name);
    void chmod_nftables();
    void configurate_grub();
    void install_grub_to_disk();
    void link_boot_partion();
    void add_user_in_group(std::string user_name, std::string group_name);

    void set_partion_luks(std::string partion);
    void set_size_lvm_volume_root(std::string size);
    void set_size_lvm_volume_swap(std::string size);
    void set_grub_disk(std::string disk);
    void set_packages(std::string packages);
    void set_timezone(std::string timezone);
    void set_hostname(std::string hostname);
    void set_user_name(std::string packages);
    void set_lvm_group(std::string name);
    void set_kernel(std::string name);

    std::string get_partion_luks();
    std::string get_grub_disk();
    std::string get_packages();
    std::string get_timezone();
    std::string get_hostname();
    std::string get_user_name();
    std::string get_lvm_group();
    std::string get_kernel();

    // void set_grub_partion(std::string size);

};

#endif
